<?php
/**
 * Service_Mail
 *
 * Класс Service_Mail осуществляет работу c эл. полчтой
 */
	class Service_Mail {



	/**
	 * отравака сообщения
	 *
	 * @param $subject тема
	 * @param $message сообщение (передавать без обращений и заключений)
	 * @param $toList эл. почта
	 * @param $ccList имя получателя (например, Дмитрий Кузьма)
	 * @param $bccList копия письма
	 * @param $replyTo эл. почта для ответа
	 * @param $mail л. почта отправителя
	 */
	  public static function send ($subject, $message, $toList, $ccList = 0, $bccList = 0, $replyTo = 0, $mail = 'buildingsite@noReply.buildingsite.ru') {
	    //Создаем заголовки письма

	    if ( is_array($toList) )
	    	$toList = join( $toList, "," );

	    if ( is_array($ccList) && sizeof($ccList) )
	    	$ccList = join( $ccList, "," );

	    if ( is_array($bccList) && sizeof($bccList) )
	      $bccList = join( $bccList, "," );

	    $headers = 'From: buildingsite <' . $mail . ">\r\n";
	    $headers .= 'MIME-Version: 1.0' . "\r\n";
	    $headers .= 'Content-Type: text/html; charset="windows-1251"' . "\r\n";
	    $headers .= 'Content-Transfer-Encoding: 8bit' . "\r\n";

	    //Задаем адрес, по которому ожидаем ответ
	    if ( $replyTo ) $headers .= 'Reply-To: ' . $replyTo . "\r\n";
	    // Задаем получателей
	    if ( $ccList ) $headers .= 'Cc: ' . $ccList . "\r\n";
	    // Задаем скрытые копии
	    if ( $bccList ) $headers .= 'Bcc: ' . $bccList . "\r\n";

	    $resultMessage = self::_htmlStart() . $message . self::_htmlEnd();


	    //работем с темой сообщения
	    $subject = '[buildingsite] ' . $subject;

			/*echo 'кому ' .$toList . '<br />';
			echo 'тема ' . $subject . '<br />';
			echo 'сообщение ' . $resultMessage . '<br />';
			echo 'доп настр ' . $headers . '<br />';*/

    return mail ( $toList, $subject, $resultMessage, $headers );
	}

	/**
	 * отпрвляем письма списку пользователей в цикле, что бы они не могли увидить кому отправляем ещё
	 */
	public static function sendGroup($subject, $message, $arrayMailList){
		if (empty($arrayMailList[0]['e_mail'])){
			foreach ($arrayMailList as $arrayMailList){
				self::send($subject, $message, $arrayMailList['e_mail']);
				set_time_limit(0);
			}
		}
		else {
			foreach ($arrayMailList as $arrayMailList){
				self::send($subject, $message, $arrayMailList);
				set_time_limit(0);
			}
		}
		return true;
	}

	/**
	 * отравка сообщения с успешной регистрацией
	 *
	 * @param  $strEMail
	 * @param  $confirmation ссылка на подтверждение
	 */
	public static function regComplete($strEMail, $confirmation = NULL){
		$message = 'Вы удачно зарегистрировались на сайте buildingsite.ru';
		$message .= '<br /><br />Для завершение регистрации, пожалуйста, перейдите по ссылке: <a href="' . $confirmation . '">завершить регистрацию</a>';
		return self::send('Регистрация завершена', $message, $strEMail);
	}

	/**
	 * отравка сообщения с подтверждением восстановления пароля
	 *
	 * @param  $strEMail
	 * @param  $confirmation ссылка на подтверждение
	 */
	public static function recoveryPassApproveReq($strEMail, $confirmation = NULL){
		$message = 'На сайте buildingsite.ru было запрошено восстановление пароля для вашей учётной записи.';
		$message .= '<br /><br />После подтверждения вам на почту будет отправлен новый пароль, который Вы
		                         сможете изменить в дальнейшем: <a href="' . $confirmation . '">Подтвердить запрос</a>';
		return self::send('Восстановление пароля. Шаг 1', $message, $strEMail);
	}

	/**
	 * отравка сообщения с именем и паролем
	 *
	 * @param  $strEMail
	 * @param  $login
	 * @param  $pass
	 */
	public static function recoveryPass($strEMail, $login, $pass){
		$message = 'Вы успешно подтвердили запрос на получение пароля к вашей учётной записи на сайте http://buildingsite.ru/. Для востановления доступа к сайту мы сгенерировали Вам новый пароль:';
		$message .= '<br /><br /><b>Password:</b> ' . $pass . '<br /><b>Login:</b> ' . $login;
		return self::send('Восстановление пароля. Шаг 2', $message, $strEMail);
	}


	public static function mailWithAttachmen($to, $subject, $message, $path, $fileName){
		$fp = fopen($path,"r");
    if (!$fp)
    {
      print "Файл $path не может быть прочитан";
      exit();
    }
    $file = fread($fp, filesize($path));
    fclose($fp);

    $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    $headers = '';
    $headers .= 'From: buildingsite <buildingsite@noReply.buildingsite.ru>' . "\r\n";
    $headers .= 'MIME-Version: 1.0' . "\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $multipart = '';
    $multipart .= "--$boundary\n";
    $multipart .= 'Content-Type: text/html; charset="windows-1251"' . "\r\n";
    $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    $multipart .= self::_htmlStart() . $message . self::_htmlEnd() . "\n\n";
    $message_part = "--$boundary\n";
    $message_part .= "Content-Type: multipart/mixed\n";
    $message_part .= "Content-Transfer-Encoding: base64\n";
    $message_part .= "Content-Disposition: attachment; filename = \"" . $fileName . "\"\n\n";
    $message_part .= chunk_split(base64_encode($file))."\n";
    $multipart .= $message_part."--$boundary--\n";

    //работем с темой сообщения
	    $subject = '[buildingsite] ' . $subject;
	    $subject = iconv('utf-8','windows-1251',$subject);
			$subject = '=?windows-1251?B?'.base64_encode($subject).'?=';

		echo 'кому ' .$to . '<br />';
		echo 'тема ' . $subject . '<br />';
		echo 'сообщение ' . $multipart . '<br />';
		echo 'доп настр ' . $headers . '<br />';
    if(!mail($to, $subject, iconv('utf-8','windows-1251',$multipart), $headers))
    {
      echo "К сожалению, письмо не отправлено";
      exit();
    }

    /*
    $path= IMAGES . "indicator.gif";
		$thm = "Просто тема";
		$msg=" <html> <b> Это проверка</b> <br>";
		$mail_to ="swivel.pin@gmail.com";
		// Отправляем почтовое сообщение
		if(empty($picture)) mail($mail_to, $thm, $msg);
		else Service_Mail::mailWithAttachmen($mail_to, $thm, $msg, $path, 'indicator.gif');
		*/
    return true;
	}

	/**
	 * Функция проверяет переданную строку регуляркой и возвращает значение 1 или 0
	 *
	 * @param unknown_type $mailParse
	 * @return unknown
	 */
   public static function parseMail($mailParse){

//   $word = '(?:[^()<>@,.;:\"\[\]\s\0-\37\177\127]+?)';
//   $local_part = $word . '(?:\.' . $word . ')*?';
//	 $subdomain = $word . '(?:\.' . $word . ')*?';
//   $domain = $subdomain . '(?:\.' . $subdomain . ')+?';
//   $patternMail = '/^'. $local_part . '@' . $domain . '$/';
//
    $filteredMail = filter_var($mailParse, FILTER_VALIDATE_EMAIL);
		if (!empty($filteredMail))
		{
			return 1;
			//echo "email ", $mailParse ," введен правильно";
		}
		else
		{
			//echo "email введен неверно";
			return 0;
		}
	}








	/*--------------------------------------------------------------*/
	static function _htmlEnd(){
			return "<br /><br />--<br />
			Редактировать оповещения: <a href=\"http://buildingsite.ru/notification\">http://buildingsite.ru/notification</a><br /><br />
			 C уважением, команда <a href='http://buildingsite.ru/' title='Перейти к сайту'>buildingsite.ru</a><br /></html>";
		}

	static function _htmlStart(){
			return '<html>Здравствуйте!<br /><br />';
		}

}
?>